package com.wzq.service.impl;

import com.wzq.dao.pojo.Code;
import com.wzq.dao.pojo.Result;
import com.wzq.service.IUploadService;
import com.wzq.util.FrameUtil;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
public class UploadServiceImpl implements IUploadService {

    /**
     * 视频文件上传
     */
    @Override
    public Map<String, Object> uploadVideo(MultipartFile file,HttpServletRequest request) throws Exception {
        Map<String, Object> resultMap=new HashMap<String, Object>();
        // 服务器存放位置
        String rootPath="C:/mimi/upload/video/";
        // 静态路径
        String basePath = request.getScheme() + "://" + request.getServerName()
                + ":" + request.getServerPort()+"/mimi/upload/video/";
        // 文件名 根据系统时间生成毫秒
        Long time = System.currentTimeMillis();

        //文件原始名称
        String fileName = file.getOriginalFilename();
        //文件后缀  从最后一个.开始截取。截取fileName的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //全文件名 新名称
        String newFileName = time+suffixName;
        //  设置视频 在服务器的存储路径
        String filePath = rootPath+newFileName;
        File newFile = new File(filePath);
        //判断目标文件所在目录是否存在
        if(!newFile.getParentFile().exists()){
            //如果目标文件所在的目录不存在，则创建父目录
            newFile.getParentFile().mkdirs();
        }

        //将内存中的数据写入磁盘
        file.transferTo(newFile);
        //静态  视频上传保存url
        String videoUrl = basePath + newFileName;

        //region 视频封面图处理
        //图片名称
        String newImgName = time + ".jpg";
        // 服务器存储图片路径
        String framefile = rootPath +"img/"+ newImgName;
        //图片静态路径
        String imgUrl = basePath+"img/"+newImgName;
        // 获取第一帧
        //视频截取封面图
        boolean first = FrameUtil.getFirst(filePath, framefile);
        //enregion
        if (!first){
            resultMap.put("returnCode",500);
            return resultMap;
        }

        resultMap.put("videoUrl", videoUrl);
        resultMap.put("imgUrl", imgUrl);
        resultMap.put("returnCode", 200);
        return resultMap;
    }

    @Override
    public Map<String, Object> uploadImage(MultipartFile fileImage,HttpServletRequest request) throws Exception{
        Map<String, Object> resultMap=new HashMap<String, Object>();

        String basePath = request.getScheme() + "://" + request.getServerName()
                + ":" + request.getServerPort()+"/mimi/upload/images/";
        Long time = System.currentTimeMillis();

        //文件原始名称
        String fileName = fileImage.getOriginalFilename();
        //从最后一个.开始截取。截取fileName的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //文件新名称
        String newFileName = time+suffixName;

        //设置文件存储路径，可以存放在你想要指定的路径里面
        //上传图片存放位置
        String rootPath="C:/mimi"+File.separator+"upload/images/";

        String filePath = rootPath+newFileName;
        File newFile = new File(filePath);
        //判断目标文件所在目录是否存在
        if(!newFile.getParentFile().exists()){
            //如果目标文件所在的目录不存在，则创建父目录
            newFile.getParentFile().mkdirs();
        }

        //将内存中的数据写入磁盘
        fileImage.transferTo(newFile);
        //图片上传保存url
        String imgUrl = basePath + newFileName;

        try {
            fileImage.transferTo(new File(imgUrl));
        } catch (IOException e) {
            e.printStackTrace();
        }

        resultMap.put("imgUrl", imgUrl);
        resultMap.put("filePath",filePath);
        resultMap.put("returnCode", 200);

        return resultMap;
    }

    private String getDate(){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //时间转换
        String nowDate = new SimpleDateFormat("yyyy-MM").format(new Date()).toString();
        return nowDate;
    }


}
